package com.zeng.gitxuexi.lock;

import java.util.GregorianCalendar;

//死锁，多个线程互相抱着对方需要的资源，然后形成僵持
public class DeadLock {
    public static void main(String[] args) {
        Makeup g1  = new Makeup(0,"灰姑凉");
        Makeup g2  = new Makeup(1,"白雪公主");
        g1.start();
        g2.start();
    }
}

//口红
class LipStick{

}

//镜子
class Mirror{

}

//化妆
class Makeup extends Thread{
    static LipStick lipStick = new LipStick();
    static Mirror mirror = new Mirror();
    int choice; //选择
    String girlName; //使用化妆品的人
    Makeup(int choice,String girlName){
        this.choice = choice;
        this.girlName = girlName;
    }

    @Override
    public void run() {
        //化妆
        try {
            makeup();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //化妆，互相持有对方的锁，需要拿到对方的资源
    private void makeup()throws Exception{
        if(choice==0){
            synchronized (lipStick){//获得口红的锁
                System.out.println(girlName+"获得口红的锁");
                Thread.sleep(1000);

            }
            synchronized (mirror){//一秒后想获取镜子
                System.out.println(girlName+"获得镜子的锁");
            }
        }else {
            synchronized (mirror){//获得口红的锁
                System.out.println(girlName+"获得镜子的锁");
                Thread.sleep(1000);
            }
            synchronized (lipStick){//一秒后想获取口红
                System.out.println(girlName+"获得口红的锁");
            }
        }
    }
}